package net;

/**
 * 类的定义
 */
public class ClassDefine {
    int s=30;
    /**
     * 成员（fielde)的定义
     * [public/private/protected] [static] [final] 类型 成员名
     * public 公共成员 不同包都可访问
     * private 私有成员，只能在本类访问
     * protected 保护成员 同包及子类可访问
     * 默认 同包可访问
     * ************************************
     * static 静态成员 属于类的，该类的所有对象共享该成员
     *     static成员和方法直接通过类名访问
     * *****************************************
     * final加在成员上 最终成员 其值不能被改变
     * final加在类上 最终类 不能被继承
     * final加在方法上 最终方法 该方法不能被重写
     */

    public static void main(String[] agrs){
        StaticDemo sd1=new StaticDemo();
        StaticDemo sd2=new StaticDemo();
        sd1.a=10;sd2.a=20;
        sd1.b=100;sd2.b=200;
        System.out.println(sd1.a+" "+sd1.b);
        System.out.println(sd2.a+" "+sd2.b);
        ClassDefine cd1=new ClassDefine();//创建对象
        System.out.println(cd1.fac(5));
        ClassDefine cd2=new ClassDefine();//创建对象
        cd2.s=40;
        System.out.println(cd2.fac(6));
        //System.out.println(fac(7));
        //System.out.println(ClassDefine.fac(6));
    }
    /**
     * 方法定义：
     * [public/private/protected] [static] [final] 类型 方法名（形参）{方法体  return 表达式}
     * 1、方法不可以嵌套定义
     *
     */
    //计算阶乘
    public int fac(int n){
        int s=1;//s为局部变量，只在方法内有效，此时成员变量s就被屏蔽掉
        for (int i=1;i<=n;i++){
            s=s*i;
        }
        System.out.println("成员变量s:"+this.s);//this代表当前对象cd，可在非static的方法中调用成员变量
        return s;
    }
}

class StaticDemo{
    int a;
    static int b;

}
